package com.tangsm.api.demo.strategy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 策略执行器策略入口
 */
@Service
public class NumberContext {

    /**
     * 使用线程安全的ConcurrentHashMap
     */
    private final Map<String, Strategy> strategyMap = new ConcurrentHashMap<>();

    /**
     * Autowired注解会自动将实现策略接口的实现类注入到Map中，key就是自定义的Bean的名称
     * @param strategyMap
     */
    @Autowired
    public NumberContext(Map<String, Strategy> strategyMap) {
        this.strategyMap.clear();
        strategyMap.forEach((k, v)-> this.strategyMap.put(k, v));
    }

    /**
     * 根据传入的标签与Map中的key对比，执行对应的逻辑
     * @param number 业务类型
     * @return 执行结果
     */
    public String getResource(String number){
        return strategyMap.get(number).getMember();
    }
    
}